home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Games / xinvaders / main.c < prev    next >
C/C++ Source or Header  |  1995-05-03  |  8KB  |  280 lines

  1. /* 
  2. Copyright notice:
  3.  
  4. This is mine.  I'm only letting you use it.  Period.  Feel free to rip off
  5. any of the code you see fit, but have the courtesy to give me credit.
  6. Otherwise great hairy beasties will rip your eyes out and eat your flesh
  7. when you least expect it.
  8.  
  9. Jonny Goldman <jonathan@think.com>
  10.  
  11. Wed May  8 1991
  12. */
  13.  
  14. /* main.c -- create our windows and initialize things. */
  15.  
  16. #define MAIN
  17. #include "vaders.h"
  18. #include <X11/Xaw/Form.h>
  19. #ifndef X11R3
  20. #include <X11/Xaw/Label.h>
  21. #else
  22. #include <X11/IntrinsicP.h>
  23. #include <X11/Label.h>
  24. #endif
  25. static int width, height;        /* Size of window. */
  26.  
  27. #ifdef XFILESEARCHPATH
  28. static void AddPathToSearchPath();
  29. #endif
  30.  
  31. static XrmOptionDescRec table[] = {
  32.     {"-debug",    "*debug",    XrmoptionNoArg,    NULL},
  33. };
  34.  
  35. static XtResource resources[] = {
  36.     {XtNwidth, XtCWidth, XtRInt, sizeof(int),
  37.      (Cardinal)&width, XtRImmediate, (caddr_t) VWIDTH},
  38.     {XtNheight, XtCHeight, XtRInt, sizeof(int),
  39.      (Cardinal)&height, XtRImmediate, (caddr_t) VHEIGHT},
  40.     {"debug", "Debug", XtRBoolean, sizeof(Boolean),
  41.      (Cardinal)&debug, XtRString, "off"},
  42.     {"font", "Font", XtRString, sizeof(String),
  43.      (Cardinal)&vaderfont, XtRString, (String)"9x15"},
  44.     {"scale", "Scale", XtRInt, sizeof(int),
  45.      (Cardinal)&scale, XtRImmediate, (caddr_t) 2},
  46.     {"basewait", "BaseWait", XtRInt, sizeof(int),
  47.      (Cardinal)&basewait, XtRImmediate, (caddr_t) 10},
  48.     {"vaderwait", "VaderWait", XtRInt, sizeof(int),
  49.      (Cardinal)&vaderwait, XtRImmediate, (caddr_t) 300},
  50.     {"spacerwait", "SpacerWait", XtRInt, sizeof(int),
  51.      (Cardinal)&spacerwait, XtRImmediate, (caddr_t) 50},
  52.     {"shotwait", "ShotWait", XtRInt, sizeof(int),
  53.      (Cardinal)&shotwait, XtRImmediate, (caddr_t) 10},
  54.     {"vshotwait", "VshotWait", XtRInt, sizeof(int),
  55.      (Cardinal)&vshotwait, XtRImmediate, (caddr_t) 30},
  56.     {"basecolor", "BaseColor", XtRPixel, sizeof(Pixel),
  57.      (Cardinal)&basepixel, XtRString, "cyan"},
  58.     {"spacercolor", "SpacerColor", XtRPixel, sizeof(Pixel),
  59.      (Cardinal)&spacerpixel, XtRString, "gray"},
  60.     {"buildingcolor", "BuildingColor", XtRPixel, sizeof(Pixel),
  61.      (Cardinal)&buildingpixel, XtRString, "yellow"},
  62.     {"vader1color", "Vader1Color", XtRPixel, sizeof(Pixel),
  63.      (Cardinal)&vader1pixel, XtRString, "blue"},
  64.     {"vader2color", "Vader2Color", XtRPixel, sizeof(Pixel),
  65.      (Cardinal)&vader2pixel, XtRString, "green"},
  66.     {"vader3color", "Vader3Color", XtRPixel, sizeof(Pixel),
  67.      (Cardinal)&vader3pixel, XtRString, "red"},
  68.     {"shotcolor", "ShotColor", XtRPixel, sizeof(Pixel),
  69.      (Cardinal)&shotpixel, XtRString, "lavender"},
  70.     {"vshotcolor", "VshotColor", XtRPixel, sizeof(Pixel),
  71.      (Cardinal)&vshotpixel, XtRString, "orange"},
  72.     {"scorecolor", "ScoreColor", XtRPixel, sizeof(Pixel),
  73.      (Cardinal)&scorepixel, XtRString, "white"},
  74.     {"maxshots", "MaxShots", XtRInt, sizeof(int),
  75.      (Cardinal) &maxshots, XtRImmediate, (caddr_t) 1},
  76.     {"maxvshots", "MaxVshots", XtRInt, sizeof(int),
  77.      (Cardinal) &maxvshots, XtRImmediate, (caddr_t) 6},
  78.     {"defaultfore", "DefaultFore", XtRPixel, sizeof(Pixel),
  79.      (Cardinal) &defaultfore, XtRString, "white"},
  80.     {"defaultback", "DefaultBack", XtRPixel, sizeof(Pixel),
  81.      (Cardinal) &defaultback, XtRString, "black"},
  82. };
  83.  
  84.  
  85. /*ARGSUSED*/
  86. static void CvtStringToFloat(args, num_args, fromVal, toVal)
  87. ArgList args;
  88. Cardinal num_args;
  89. XrmValue    *fromVal;
  90. XrmValue    *toVal;
  91. {
  92.     static float  i;
  93.  
  94.     if (sscanf((char *)fromVal->addr, "%f", &i) == 1) {
  95.     toVal->size = sizeof(float);
  96.     toVal->addr = (caddr_t) &i;
  97.     } else {
  98.     toVal->size = 0;
  99.     toVal->addr = NULL;
  100.     }
  101. }
  102.  
  103. static void AddResource(r, p)
  104. char *r;
  105. Pixel *p;
  106. {
  107.     XrmValue value;
  108.     XrmDatabase db = XtDatabase(dpy);
  109.     value.size = sizeof(Pixel);
  110.     value.addr = (caddr_t) p;
  111.     XrmPutResource(&db, r, XtRPixel, &value);
  112. }
  113.  
  114. Widget
  115. MakeCommandButton(box, name, function, vlink, hlink, data)
  116. Widget box, vlink, hlink;
  117. char *name;
  118. XtCallbackProc function;
  119. caddr_t data;
  120. {
  121.   Widget w;
  122.   Arg args[10];
  123.   Cardinal numargs;
  124.  
  125.   numargs = 0;
  126.   if(vlink != NULL) {
  127.     XtSetArg(args[numargs], XtNfromVert, vlink); numargs++;
  128.   }
  129.   if(hlink != NULL) {
  130.     XtSetArg(args[numargs], XtNfromHoriz, hlink); numargs++;
  131.   }
  132.   w = XtCreateManagedWidget(name, commandWidgetClass, box, args, numargs);
  133.   if (function != NULL)
  134.     XtAddCallback(w, XtNcallback, function, data);
  135.   return w;
  136. }
  137.  
  138. main(argc, argv)
  139. Cardinal argc;
  140. char **argv;
  141. {
  142.   static Arg args[10];
  143.   int n;
  144.   Widget form, button;
  145.   extern WidgetClass labelwidgetclass;
  146.  
  147.   me_image = NULL;
  148.  
  149.   srandom(time(0));
  150. #ifdef XFILESEARCHPATH
  151.   AddPathToSearchPath(XFILESEARCHPATH);
  152. #endif
  153.   toplevel = XtInitialize(argv[0], "Vaders", table, XtNumber(table),
  154.               &argc, argv);
  155.   dpy = XtDisplay(toplevel);
  156.   XtAddConverter(XtRString, XtRFloat, CvtStringToFloat, NULL, 0);
  157.   XtGetApplicationResources(toplevel, (caddr_t) NULL, 
  158.                 resources, XtNumber(resources),
  159.                 NULL, (Cardinal) 0);
  160.   AddResource("*background", &defaultback);
  161.   if (DisplayCells(dpy, DefaultScreen(dpy)) <= 2)
  162.     {
  163.       basepixel = defaultfore;
  164.       buildingpixel = defaultfore;
  165.       vader1pixel = defaultfore;
  166.       vader2pixel = defaultfore;
  167.       vader3pixel = defaultfore;
  168.       shotpixel = defaultfore;
  169.       vshotpixel = defaultfore;
  170.       scorepixel = defaultfore;
  171.     }
  172.   if (scale<1) scale = 1;
  173.   if (scale>2) scale = 2;
  174.   width = scale*VWIDTH;
  175.   height = scale*VHEIGHT;
  176.  
  177.   form = XtCreateManagedWidget ("form", formWidgetClass,
  178.                 toplevel, NULL, 0);
  179.  
  180.   n = 0;
  181.   XtSetArg (args[n], XtNleft, XtChainLeft); n++;
  182.   XtSetArg (args[n], XtNright, XtChainLeft); n++;
  183.   XtSetArg (args[n], XtNtop, XtChainTop); n++;
  184.   XtSetArg (args[n], XtNbottom, XtChainTop); n++;
  185.   XtSetArg (args[n], XtNwidth, width); n++;
  186.   XtSetArg (args[n], XtNheight, height); n++;
  187.   
  188.   gamewidget = (VadersWidget)
  189.     XtCreateManagedWidget("field", vadersWidgetClass, form, args, n);
  190.  
  191.   n = 0;
  192.   XtSetArg (args[n], XtNleft, XtChainLeft); n++;
  193.   XtSetArg (args[n], XtNright, XtChainLeft); n++;
  194.   XtSetArg (args[n], XtNtop, XtChainTop); n++;
  195.   XtSetArg (args[n], XtNbottom, XtChainTop); n++;
  196.   XtSetArg (args[n], XtNfromHoriz, gamewidget); n++;
  197.   XtSetArg (args[n], XtNhorizDistance, 5); n++;
  198.   XtSetArg (args[n], XtNwidth, scale*IWIDTH); n++;
  199.   XtSetArg (args[n], XtNheight, height/2); n++;
  200.   
  201.   labelwidget = (VadersWidget)
  202.     XtCreateManagedWidget("label", vadersWidgetClass, form, args, n);
  203.  
  204.   pausebutton = MakeCommandButton(form, "pause", Pause, labelwidget, gamewidget, NULL);
  205.   XtSetArg(args[0], XtNlabel, " Start");
  206.   XtSetArg(args[1], XtNforeground, defaultfore);
  207.   XtSetArg(args[2], XtNbackground, defaultback);
  208.   XtSetArg(args[3], XtNborderColor, defaultfore);
  209.   XtSetValues(pausebutton, args, 4);
  210.   button = MakeCommandButton(form, "quit", Quit, pausebutton, gamewidget, NULL);
  211.   XtSetArg(args[0], XtNlabel, " Quit ");
  212.   XtSetArg(args[1], XtNforeground, defaultfore);
  213.   XtSetArg(args[2], XtNbackground, defaultback);
  214.   XtSetArg(args[3], XtNborderColor, defaultfore);
  215.   XtSetValues(button, args, 4);
  216.   infobutton = MakeCommandButton(form, "info", ShowInfo, button, gamewidget, NULL);
  217.   XtSetArg(args[0], XtNlabel, " Info ");
  218.   XtSetArg(args[1], XtNforeground, defaultfore);
  219.   XtSetArg(args[2], XtNbackground, defaultback);
  220.   XtSetArg(args[3], XtNborderColor, defaultfore);
  221.   XtSetValues(infobutton, args, 4);
  222.  
  223.   XtRealizeWidget(toplevel);
  224.   ResetGame();
  225.   XtMainLoop();
  226. }
  227.  
  228. #ifdef XFILESEARCHPATH
  229. static void
  230. AddPathToSearchPath(path)
  231. char *path;
  232. {
  233.      char *old, *new;
  234.      extern char *getenv();
  235.      
  236.      old = getenv("XFILESEARCHPATH");
  237.      if (old) {
  238. #if defined(mips) || defined(hpux) || defined(sun)
  239.       /* +1 for =, +2 for :, +3 for null */
  240.       new = XtMalloc((Cardinal) (strlen("XFILESEARCHPATH") +
  241.                      strlen(old) +
  242.                      strlen(path) + 3));
  243.       (void) strcpy(new, "XFILESEARCHPATH");
  244.       (void) strcat(new, "=");
  245.       (void) strcat(new, old);
  246.       (void) strcat(new, ":");
  247.       (void) strcat(new, path);
  248.       putenv(new);
  249. #else
  250.       /* +1 for colon, +2 for null */
  251.       new = XtMalloc((Cardinal) (strlen(old) + strlen(path) + 2));
  252.       (void) strcpy(new, old);
  253.       (void) strcat(new, ":");
  254.       (void) strcat(new, path);
  255.       setenv("XFILESEARCHPATH", new, 1);
  256. #endif
  257.      }
  258.      else {
  259. #if defined(mips) || defined(hpux) || defined(sun)
  260.       new = XtMalloc((Cardinal) (strlen("XFILESEARCHPATH") +
  261.                      strlen(path) + 2));
  262.       (void) strcpy(new, "XFILESEARCHPATH");
  263.       (void) strcat(new, "=");
  264.       (void) strcat(new, path);
  265.       putenv(new);
  266. #else
  267.       setenv("XFILESEARCHPATH", path, 1);
  268. #endif
  269.      }
  270. }
  271. #endif
  272.  
  273. #ifdef sparc
  274. XShapeCombineMask()
  275. {}
  276.  
  277. XShapeQueryExtension()
  278. {}
  279. #endif
  280.